package com.johann.leetcode;
// ---------找规律没用--------
// 当ABCDEFGHIJK numRows=2时
//  A C E G I K
//  B D F H J
//  输出就是 ACEGIKBDEHJ
//  第一行输出，从第一个元素开始，取出原string差为2（间隔1）的所有元素之后，剩下的append上去

// 当ABCDEFGHIJK numRows=3时
// A   E   I
// B D F H J
// C   G   K
// 第一行输出，取出原string间隔3的所有元素
// 第二行输出，取出原string间隔1的所有元素
// 剩下的append上去

// 当ABCDEFGHIJK numRows=4时
// A    G
// B  F H
// C E  I K
// D    J
// 第一行输出，取出原string第一个元素开始 间隔5 5 5 5 的所有元素
// 第二行输出，取出原string第二个元素开始 间隔3 1 3 1...的所有元素
// 第三行输出，取出原stirng第三个元素开始 间隔1 3 1 3...的所有元素
// 第四行输出，取出原string第四个元素开始 间隔5 5 5 5的所有元素

// 当ABCDEFGHIJK numRows=5时
// A     I
// B   H J
// C  G  K
// D F
// E
// 第一行输出，取出原string第一个元素开始 间隔7 7 7 7的所有元素
// 第二行输出，取出原string第二个元素开始 间隔5 1 5 1...的所有元素
// 第三行输出，取出原stirng第三个元素开始 间隔3 3 3 3...的所有元素
// 第四行输出，取出原string第四个元素开始 间隔1 5 1 5...的所有元素
// 第5行输出，取出原string第一个元素开始  间隔7 7 7 7 的所有元素

// 当ABCDEFGHIJK numRows=6时
// A         K
// B       J
// C     I
// D   H
// E G
// F
// 第一行输出，取出原string第一个元素开始 间隔9的所有元素
// 第二行输出，取出原string第二个元素开始 间隔7 1 7 1...的所有元素
// 第三行输出，取出原stirng第三个元素开始 间隔5 3 5 3...的所有元素

// 第四行输出，取出原string第四个元素开始 间隔3 5 3 5...的所有元素
// 第5行输出，取出原string第5个元素开始   间隔1 7 1 7...的所有元素
//  6                                       9 9 9 9
// (numRows-1)*2-1;

public class T5_ZConvert {
   public static class Solution{
      public String convert(String s, int numRows) {
         if (s.length() <= 2 || numRows == 1) {
            return s;
         }
         // 定义一个sb数组，用以存放numRows个字符串，然后拼接起来
         StringBuilder[] sbArr = new StringBuilder[numRows];
         int index=0; // sb数组的索引值
         int ptr=1;  // 增减量 加1 减1
         // 初始化sb[]里的各个元素
         for (int i = 0; i < numRows; i++) {
            StringBuilder sb = new StringBuilder();
            sbArr[i] = sb;
         }
         // 遍历数组的各个元素，按照zigzag的格式输入到3个sb元素里面
         for (char c : s.toCharArray()) {
            sbArr[index].append(c);
            index = index + ptr ;
            // index索引在0 1 2 1 0之间来回摆动
            if(index==0 || index == numRows-1){
               // 符号取反
               ptr = -ptr;
            }
         }
         // 最后将3个sb元素拼接到一起
         StringBuilder res = new StringBuilder();
         for (int i = 0; i < numRows; i++) {
            res.append(sbArr[i]);
         }
         return res.toString();
      }

   }

   public static void main(String[] args) {
      String s = "PAYPALISHIRING";
      int numRows = 3;
      System.out.println(new Solution().convert(s,numRows));
   }
}
